# 抖码算法，让算法学习变得简单有趣
# 作者：老汤

"""
题目描述：

    磁盘的容量单位常用的有 M、G、T 这撒安格等级，它们之间的换算关系为 1T = 1024G、1G = 1024G
    现在给定 n 块磁盘的容量，请对它们按从小到大的顺序进行稳定排序
    假如给定 5 块盘的容量，1T、20M、3G、10G6T、3M12G9M，那么排序后的结果是 20M、3G、3M12G9M、1T、10G6T
    注意：单位可以重复出现，上述 3M12G9M 表示的容量即为 3M+12G+9M，和 12M12G 相等

    输入描述：
    输入第一行包含一个整数 n (2 <= n <= 100)，表示磁盘的个数，
    接下的 n 行，每行一个字符串 (长度大于 2，小于 30)，表示磁盘的容量，
    由一个或多个格式为 mv 的子串组成，其中 m 表示容量大小，v 表示容量单位，
    例如20M，1T，30G，10G6T，3M12G9M。

    磁盘容量 m 的范围为 1 到 1024 的正整数，容量单位 v 的范围只包含题目中提到的 M，G，T三 种，换算关系如题目描述。

    输出描述：
    输出 n 行，表示 n 块磁盘容量排序后的结果。

    示例 1：
    输入
    3
    1G
    2G
    1024M

    输出
    1G
    1024M
    2G

    说明：1G 和 1024M 容量相等，稳定排序要求保留它们原来的相对位置，故 1G 在 1024M 之前

    示例 2：
    输入
    3
    2G4M
    3M2G
    1T

    输出
    3M2G
    2G4M
    1T

    说明：1T 的容量大于 2G4M，2G4M 的容量大于 3M2G
"""

from functools import cmp_to_key


# 将 G 和 T 转换成 M
# 比如输入 2M2G1T，那么返回 2 + 2 * 1024 + 1 * 1024 * 1024
def get_capacity(line):
    res, num = 0, ""
    for c in line:
        if '0' <= c <= '9':
            num += c
        else:
            tmp = int(num)
            if c == 'M':
                res += tmp
            elif c == 'G':
                res += (tmp * 1024)
            elif c == 'T':
                res += (tmp * 1024 * 1024)
            num = ""
    return res


def _sort(o1, o2):
    cap1, cap2 = get_capacity(o1), get_capacity(o2)
    if cap1 > cap2:
        # 返回 1  的话，那么就是降序排列，这里需要将 o1 和 o2 的顺序调换下
        return 1
    elif cap1 < cap2:
        # 返回 -1 的话，那么就是升序排列
        return -1
    else:
        # 相等话，则顺序不变，即稳定排序
        return 0


n = int(input())
lines = [None] * n
for i in range(n):
    lines[i] = input()

# 自定义排序逻辑
# 这里要是不熟悉的话，请学习课程 A 的排序章节：https://appvpmptkl94774.pc.xiaoe-tech.com/detail/v_623296b9e4b02b8258561773/3?from=p_62791d3ce4b0812e17972cf9&type=6&parent_pro_id=
lines.sort(key=cmp_to_key(_sort))

for line in lines:
    print(line)
